/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controlador;

import ws.Bebe;
import ws.Consulta;
import java.awt.Color;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import vista.VentanaActualizarBebe;
import vista.VentanaLogin;
import vista.VentanaPrincipal;
import vista.VentanaRegistroBebe;
import vista.VentanaReporteBebe;

/**
 *
 * @author Jesús Vásquez
 */
public class ControladorVentana {

    DefaultTableModel modeloTablaReporte;
    VentanaPrincipal ventanaPrincipal;
    VentanaActualizarBebe ventanaActualizarBebe;
    VentanaRegistroBebe ventanaRegistroBebe;
    VentanaReporteBebe ventanaReporteBebe;
    VentanaLogin ventanaLogin;

    public void establecerModeloTabla(JTable tablaReporte) {
        modeloTablaReporte = new DefaultTableModel();
        tablaReporte.setModel(modeloTablaReporte);

        modeloTablaReporte.addColumn("Fecha evaluación");
        modeloTablaReporte.addColumn("Edad");
        modeloTablaReporte.addColumn("Peso (kg)");
        modeloTablaReporte.addColumn("Estatura (cm)");
        modeloTablaReporte.addColumn("Circ. Cefálica (cm)");
    }

    public void vaciarComboBox(JComboBox comboBox) {
        comboBox.removeAllItems();
        comboBox.addItem("Seleccione...");
    }

    public void vaciarCampoTexto(JTextField campoTexto) {
        campoTexto.setText("");
    }

    public void ventanaActualizarBebe(JFrame ventana) {
        ventanaActualizarBebe = new VentanaActualizarBebe();

        ventana.setVisible(false);
        ventana.dispose();

        ventanaActualizarBebe.setVisible(true);
    }

    public void ventanaPrincipal(JFrame ventana) {
        ventanaPrincipal = new VentanaPrincipal();

        ventana.setVisible(false);
        ventana.dispose();

        ventanaPrincipal.setVisible(true);
    }

    public void ventanaRegistroBebe(JFrame ventana) {
        ventanaRegistroBebe = new VentanaRegistroBebe();

        ventana.setVisible(false);
        ventana.dispose();

        ventanaRegistroBebe.setVisible(true);
    }

    public void ventanaReporteBebe(JFrame ventana) {
        ventanaReporteBebe = new VentanaReporteBebe();

        ventana.setVisible(false);
        ventana.dispose();

        ventanaReporteBebe.setVisible(true);
    }

    public void ventanaLogin(JFrame ventana) {
        ventanaLogin = new VentanaLogin();

        ventana.setVisible(false);
        ventana.dispose();

        ventanaLogin.setVisible(true);
    }
        
    public void cerrarAplicacion(JFrame ventana) {
        ventana.dispose();
    }

    public void llenarListaBebe(JComboBox comboBebe, List<Bebe> listaBebe) {
        vaciarComboBox(comboBebe);

        try{
        for (Bebe bebe : listaBebe) {
            comboBebe.addItem(bebe.getId() + " - " + bebe.getNombre() + " " + bebe.getApellido());
        }
        }catch(NullPointerException npex){
                JOptionPane.showMessageDialog(null,
                        "No es posible llenar la lista de bebés",
                        "Advetencia",
                        JOptionPane.WARNING_MESSAGE);        
        }
    }

    public void llenarTablaConsulta(JTable tablaReporte, List<Bebe> listaBebe, JLabel nombre, JLabel fechaNacimiento, JComboBox comboBebe) {

        int idBebe;
        String fechaConsulta;
        String edadBebe;
        String pesoBebe;
        String estaturaBebe;
        String circCefalicaBebe;
        String nombreBebe;
        String fechaNacBebe;
        Object[] filaTablaConsulta;
        List<Consulta> listaConsultaBebe;

        filaTablaConsulta = new Object[5];
        idBebe = obtenerIdBebe(comboBebe);

        nombre.setText("...");
        fechaNacimiento.setText("...");

        vaciarTabla(tablaReporte);

        try {
            for (Bebe bebe : listaBebe) {
                if (bebe.getId() == idBebe) {
                    nombreBebe = bebe.getNombre() + " " + bebe.getApellido();
                    fechaNacBebe = bebe.getFechaNacimiento();
                    listaConsultaBebe = bebe.getListaConsulta();

                    for (Consulta consulta : listaConsultaBebe) {
                        pesoBebe = consulta.getPeso();
                        estaturaBebe = consulta.getEstatura();
                        fechaConsulta = consulta.getFecha();
                        circCefalicaBebe = consulta.getCircunferenciaCefalica();
                        edadBebe = consulta.getEdad();

                        filaTablaConsulta[0] = fechaConsulta;
                        filaTablaConsulta[1] = edadBebe;
                        filaTablaConsulta[2] = pesoBebe;
                        filaTablaConsulta[3] = estaturaBebe;
                        filaTablaConsulta[4] = circCefalicaBebe;

                        modeloTablaReporte.addRow(filaTablaConsulta);
                        nombre.setText(nombreBebe);
                        fechaNacimiento.setText(fechaNacBebe);
                    }
                }
            }
        } catch (NullPointerException npex) {
            JOptionPane.showMessageDialog(null,
                    "El bebé no tiene consultas",
                    "Advetencia",
                    JOptionPane.WARNING_MESSAGE);
        }
    }

    public int obtenerIdBebe(JComboBox comboBox) {

        String nombreCombo;
        char identificadorBebe;
        int idBebe;

        nombreCombo = comboBox.getSelectedItem().toString();

        identificadorBebe = nombreCombo.charAt(0);
        idBebe = Integer.parseInt(String.valueOf(identificadorBebe));

        return idBebe;
    }

    public void vaciarTabla(JTable tablaReporte) {
        int tamTabla = tablaReporte.getRowCount();

        while (tamTabla > 0) {
            modeloTablaReporte.removeRow(tamTabla - 1);
            tamTabla = tamTabla - 1;
        }
    }

    public void llenarCamposActualizacion(JComboBox comboBebe, JTextField estatura, JTextField peso, JTextField circunferencia, JTextField edad, List<Bebe> listaBebe) {
        String estaturaBebe;
        String pesoBebe;
        String circunferenciaBebe;
        String edadBebe;
        int idBebe;
        List<Consulta> listaConsultaBebe;

        if (comboBebe.getSelectedIndex() > 0) {
            idBebe = obtenerIdBebe(comboBebe);

            vaciarCampoTexto(estatura);
            vaciarCampoTexto(peso);
            vaciarCampoTexto(circunferencia);
            vaciarCampoTexto(edad);

            try {
                for (Bebe bebe : listaBebe) {
                    if (bebe.getId() == idBebe) {
                        listaConsultaBebe = bebe.getListaConsulta();
                        for (Consulta consulta : listaConsultaBebe) {
                            estaturaBebe = consulta.getEstatura();
                            pesoBebe = consulta.getPeso();
                            circunferenciaBebe = consulta.getCircunferenciaCefalica();
                            edadBebe = consulta.getEdad();

                            edad.setText(edadBebe);
                            estatura.setText(estaturaBebe);
                            peso.setText(pesoBebe);
                            circunferencia.setText(circunferenciaBebe);
                        }
                    }
                }
            } catch (NullPointerException npex) {
                JOptionPane.showMessageDialog(null,
                        "El bebé no tiene consultas",
                        "Advetencia",
                        JOptionPane.WARNING_MESSAGE);
            }
        } else {
            JOptionPane.showMessageDialog(null,
                    "Seleccione un campo válido",
                    "Advetencia",
                    JOptionPane.WARNING_MESSAGE);
        }
    }
}
